home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Programming / Programming Languages / UCB Logo 3.0 / CSLS / algs next >
Text File  |  1992-09-04  |  7KB  |  270 lines

  1. TO ACOUNT :ARRAY
  2. OUTPUT COUNT :ARRAY
  3. END
  4.  
  5. TO ADDCHILD :TREE :CHILD
  6. MAKE :TREE LPUT :CHILD THING :TREE
  7. END
  8.  
  9. TO ADECK
  10. LOCAL [RANKS SUITS]
  11. MAKE "RANKS LISTTOARRAY [A 2 3 4 5 6 7 8 9 10 J Q K]
  12. MAKE "SUITS LISTTOARRAY [H S D C]
  13. MAKE "DECK ARRAY 52
  14. MAKE "INDEX 0
  15. FOR [J 0 3] ~
  16.     [FOR [I 0 12] ~
  17.          [PARRAY :DECK :INDEX WORD (GARRAY :RANKS :I) (GARRAY :SUITS :J) ~
  18.           MAKE "INDEX :INDEX+1]]
  19. END
  20.  
  21. TO AEQUALP :ARRAY1 :ARRAY2
  22. OP EQUALP :ARRAY1 :ARRAY2
  23. END
  24.  
  25. TO GARRAY :ARRAY :INDEX
  26. OP ITEM :INDEX+1 :ARRAY
  27. END
  28.  
  29. TO PARRAY :ARRAY :INDEX :VALUE
  30. SETITEM :INDEX+1 :ARRAY :VALUE
  31. END
  32.  
  33. TO AREACODE :PAIR
  34. OUTPUT FIRST :PAIR
  35. END
  36.  
  37. TO ASHUFFLE
  38. ADECK
  39. FOR [I 51 1] [ASHUFFLE1 :I (RANDOM :I+1) (GARRAY :DECK :I)]
  40. END
  41.  
  42. TO ASHUFFLE1 :I :J :OLDI
  43. PARRAY :DECK :I (GARRAY :DECK :J)
  44. PARRAY :DECK :J :OLDI
  45. END
  46.  
  47. TO BALANCE :LIST
  48. IF EMPTYP :LIST [OUTPUT []]
  49. IF EMPTYP BF :LIST [OUTPUT LEAF FIRST :LIST]
  50. OUTPUT BALANCE1 (INT (COUNT :LIST)/2) :LIST []
  51. END
  52.  
  53. TO BALANCE1 :COUNT :IN :OUT
  54. IF EQUALP :COUNT 0 ~
  55.    [OUTPUT TREE (FIRST :IN) (LIST BALANCE REVERSE :OUT BALANCE BF :IN)]
  56. OUTPUT BALANCE1 (:COUNT-1) (BF :IN) (FPUT FIRST :IN :OUT)
  57. END
  58.  
  59. TO CHILDREN :NODE
  60. OUTPUT BUTFIRST THING :NODE
  61. END
  62.  
  63. TO CITIES :NAME
  64. OUTPUT CITIES1 FINDDATUM :NAME :WORLD
  65. END
  66.  
  67. TO CITIES1 :SUBTREE
  68. IF LEAFP :SUBTREE [OUTPUT (LIST DATUM :SUBTREE)]
  69. OUTPUT MAP.SE [CITIES1 ?] CHILDREN :SUBTREE
  70. END
  71.  
  72. TO CITY :PAIR
  73. OUTPUT BUTFIRST :PAIR
  74. END
  75.  
  76. TO DATUM :NODE
  77. OUTPUT FIRST THING :NODE
  78. END
  79.  
  80. TO FINDDATUM :NAME :TREE
  81. IF EQUALP :NAME DATUM :TREE [OUTPUT :TREE]
  82. OUTPUT TRANSFER [NOT EMPTYP ?OUT] [FINDDATUM :NAME ?IN] CHILDREN :TREE
  83. END
  84.  
  85. TO HIGHBRANCH :TREE
  86. IF LEAFP :TREE [OUTPUT []]
  87. OUTPUT LAST CHILDREN :TREE
  88. END
  89.  
  90. TO HOWMANY
  91. PRINT :COMPARISONS
  92. ERN "COMPARISONS
  93. END
  94.  
  95. TO LDECK
  96. OUTPUT CROSSMAP [WORD :1 :2] [[A 2 3 4 5 6 7 8 9 10 J Q K] [H S D C]]
  97. END
  98.  
  99. TO LEAF :DATUM
  100. OUTPUT TREE :DATUM []
  101. END
  102.  
  103. TO LEAFP :NODE
  104. OUTPUT EMPTYP CHILDREN :NODE
  105. END
  106.  
  107. TO LEAVES :LEAVES
  108. OUTPUT MAP [LEAF ?] :LEAVES
  109. END
  110.  
  111. TO LESSTHANP :A :B
  112. IF NOT NAMEP "COMPARISONS [MAKE "COMPARISONS 0]
  113. MAKE "COMPARISONS :COMPARISONS+1
  114. OUTPUT :A < :B
  115. END
  116.  
  117. TO LISTCITY :CODE
  118. OUTPUT CITY FIND [EQUALP :CODE AREACODE ?] :CODELIST
  119. END
  120.  
  121. TO LOCATE :CITY
  122. OUTPUT LOCATE1 :CITY :WORLD
  123. END
  124.  
  125. TO LOCATE1 :CITY :SUBTREE
  126. LOCAL "RESULT
  127. IF LEAFP :SUBTREE [OUTPUT IFELSE EQUALP :CITY DATUM :SUBTREE [(LIST :CITY)] [[]]]
  128. MAKE "RESULT TRANSFER [NOT EMPTYP ?OUT] [LOCATE1 :CITY ?IN] CHILDREN :SUBTREE
  129. IF EMPTYP :RESULT [OUTPUT []]
  130. OUTPUT FPUT (DATUM :SUBTREE) :RESULT
  131. END
  132.  
  133. TO LOWBRANCH :TREE
  134. IF LEAFP :TREE [OUTPUT []]
  135. OUTPUT FIRST CHILDREN :TREE
  136. END
  137.  
  138. TO LSHUFFLE :DECK
  139. IF EMPTYP :DECK [OUTPUT []]
  140. LOCAL "INDEX
  141. MAKE "INDEX 1+RANDOM COUNT :DECK
  142. OUTPUT FPUT (ITEM :INDEX :DECK) (LSHUFFLE (REMOVEITEM :INDEX :DECK))
  143. END
  144.  
  145. TO NEXTROW :COMBS
  146. IF EMPTYP BF :COMBS [OUTPUT :COMBS]
  147. OUTPUT FPUT (SUM FIRST :COMBS FIRST BF :COMBS) NEXTROW BF :COMBS
  148. END
  149.  
  150. TO PSORT :LIST
  151. LOCAL "SPLIT
  152. IF (COUNT :LIST) < 2 [OUTPUT :LIST]
  153. MAKE "SPLIT (SUM FIRST :LIST LAST :LIST)/2
  154. IF LESSTHANP FIRST :LIST :SPLIT ~
  155.    [OUTPUT PSORT1 :SPLIT (BF :LIST) (LIST FIRST :LIST) []]
  156. OUTPUT PSORT1 :SPLIT (BL :LIST) (LIST LAST :LIST) []
  157. END
  158.  
  159. TO PSORT1 :SPLIT :IN :LOW :HIGH
  160. IF EMPTYP :IN [OUTPUT SE PSORT :LOW PSORT :HIGH]
  161. IF LESSTHANP FIRST :IN :SPLIT ~
  162.    [OUTPUT PSORT1 :SPLIT (BF :IN) (FPUT FIRST :IN :LOW) :HIGH]
  163. OUTPUT PSORT1 :SPLIT (BF :IN) :LOW (FPUT FIRST :IN :HIGH)
  164. END
  165.  
  166. TO QUADRATIC :A :B :C
  167. LOCAL [ROOT X1 X2]
  168. MAKE "ROOT SQRT (:B * :B-4 * :A * :C)
  169. MAKE "X1 (-:B+:ROOT)/(2 * :A)
  170. MAKE "X2 (-:B-:ROOT)/(2 * :A)
  171. PRINT (SE [THE SOLUTIONS ARE] :X1 "AND :X2)
  172. END
  173.  
  174. TO REALT :N :K
  175. IF EQUALP :K 0 [OUTPUT 1]
  176. IF EQUALP :N 0 [OUTPUT 0]
  177. OUTPUT (T :N :K-1) + (T :N-1 :K)
  178. END
  179.  
  180. TO REMOVEITEM :NUMBER :LIST
  181. IF EQUALP :NUMBER 1 [OUTPUT BF :LIST]
  182. OUTPUT FPUT (FIRST :LIST) (REMOVEITEM :NUMBER-1 BF :LIST)
  183. END
  184.  
  185. TO SIMPLEX :BUTTONS
  186. OUTPUT 2 * FIRST CASCADE.2 :BUTTONS ~
  187.                            [FPUT (SUMPRODS BF ?2 ?1) ?1] [1] ~
  188.                            [FPUT 1 NEXTROW ?2] [1 1]
  189. END
  190.  
  191. TO SSORT :LIST
  192. IF (COUNT :LIST) < 2 [OUTPUT :LIST]
  193. OUTPUT SSORT1 (FIRST :LIST) (BF :LIST) []
  194. END
  195.  
  196. TO SSORT1 :MIN :IN :OUT
  197. IF EMPTYP :IN [OUTPUT FPUT :MIN SSORT :OUT]
  198. IF LESSTHANP :MIN (FIRST :IN) [OP SSORT1 :MIN (BF :IN) (FPUT FIRST :IN :OUT)]
  199. OUTPUT SSORT1 (FIRST :IN) (BF :IN) (FPUT :MIN :OUT)
  200. END
  201.  
  202. TO SUMPRODS :A :B
  203. IF EMPTYP :A [OUTPUT 0]
  204. OUTPUT SUM (PRODUCT FIRST :A FIRST :B) (SUMPRODS BF :A BF :B)
  205. END
  206.  
  207. TO T :N :K
  208. LOCAL "RESULT
  209. MAKE "RESULT GPROP (WORD "N :N) (WORD "K :K)
  210. IF NOT EMPTYP :RESULT [OUTPUT :RESULT]
  211. MAKE "RESULT REALT :N :K
  212. PPROP (WORD "N :N) (WORD "K :K) :RESULT
  213. OUTPUT :RESULT
  214. END
  215.  
  216. TO TREE :DATUM :CHILDREN
  217. LOCAL "NODE
  218. MAKE "NODE GENSYM
  219. MAKE :NODE FPUT :DATUM :CHILDREN
  220. OUTPUT :NODE
  221. END
  222.  
  223. TO TREECITY :CODE
  224. OUTPUT CITY TREECITY1 :CODE :CODETREE
  225. END
  226.  
  227. TO TREECITY1 :CODE :TREE
  228. LOCAL "DATUM
  229. IF EMPTYP :TREE [OUTPUT [0 NO CITY]]
  230. MAKE "DATUM DATUM :TREE
  231. IF :CODE = AREACODE :DATUM [OUTPUT :DATUM]
  232. IF :CODE < AREACODE :DATUM [OUTPUT TREECITY1 :CODE LOWBRANCH :TREE]
  233. OUTPUT TREECITY1 :CODE HIGHBRANCH :TREE
  234. END
  235.  
  236. TO WORLDTREE
  237. MAKE "WORLD TREE "WORLD ~
  238.                  (LIST (TREE "FRANCE LEAVES [PARIS DIJON AVIGNON]) ~
  239.                        (TREE "CHINA LEAVES [BEIJING NANKING SHANGHAI CANTON]) ~
  240.                        (TREE [UNITED STATES] ~
  241.                              (LIST (TREE [NEW YORK] ~
  242.                                           LEAVES [[NEW YORK] ALBANY ~
  243.                                                   ROCHESTER ARMONK]) ~
  244.                                    (TREE "MASSACHUSETTS ~
  245.                                          LEAVES [BOSTON CAMBRIDGE ~
  246.                                                  SUDBURY MAYNARD]) ~
  247.                                    (TREE "CALIFORNIA ~
  248.                                          LEAVES [[SAN FRANCISCO] BERKELEY ~
  249.                                                  [PALO ALTO] PASADENA]) ~
  250.                                    (TREE "WASHINGTON ~
  251.                                          LEAVES [SEATTLE OLYMPIA]))) ~
  252.                        (TREE "CANADA ~
  253.                              (LIST (TREE "ONTARIO ~
  254.                                          LEAVES [TORONTO OTTAWA WINDSOR]) ~
  255.                                    (TREE "QUEBEC ~
  256.                                          LEAVES [MONTREAL QUEBEC LACHINE]) ~
  257.                                    (TREE "MANITOBA LEAVES [WINNIPEG]))))
  258. END
  259.  
  260.  
  261. MAKE "CODELIST [[202 WASHINGTON] [206 SEATTLE] [212 NEW YORK] [213 LOS ANGELES] ~
  262.                 [215 PHILADELPHIA] [303 DENVER] [305 MIAMI] [313 DETROIT] ~
  263.                 [314 ST. LOUIS] [401 PROVIDENCE] [404 ATLANTA] [408 SUNNYVALE] ~
  264.                 [414 MILWAUKEE] [415 SAN FRANCISCO] [504 NEW ORLEANS] ~
  265.                 [608 MADISON] [612 ST. PAUL] [613 KINGSTON] [614 COLUMBUS] ~
  266.                 [615 NASHVILLE] [617 BOSTON] [702 LAS VEGAS] [704 CHARLOTTE] ~
  267.                 [712 SIOUX CITY] [714 ANAHEIM] [716 ROCHESTER] [717 SCRANTON] ~
  268.                 [801 SALT LAKE CITY] [804 NEWPORT NEWS] [805 VENTURA] ~
  269.                 [808 HONOLULU]]
  270.